from openai import OpenAI
from typing import List, Dict, Optional, Union


def qwen_chat(
    system_prompt="你是一个聊天助手",
    user_prompt="please introduce yourself",
    model="qwen3:8b",
    api_key="ollama",
    stream=False,
    response_format="text",
    base_url="http://localhost:11434/v1",
    tools=None,
    messages=None
):
    """调用本地 Ollama 运行的 Qwen 模型
    
    参数:
        system_prompt: 系统角色设定
        user_prompt: 用户问题
        model: Ollama 中的模型名称
        api_key: 任意字符串（Ollama 无需真实 key）
        stream: 是否流式输出
        base_url: Ollama 的 API 地址
        response_format: 响应格式
        tools: 工具列表
        messages: 完整的消息历史（可选）
    """
    client = OpenAI(api_key=api_key, base_url=base_url)
    
    # 如果提供了完整的消息历史，则使用它
    if messages is not None:
        full_messages = messages
    else:
        # 否则构造基本消息
        full_messages = [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": user_prompt}
        ]
    
    # 准备请求参数
    request_params = {
        "model": model,
        "messages": full_messages,
        "stream": stream,
        "response_format": {"type": response_format} if response_format != "text" else None
    }
    
    # 如果提供了工具，则添加到请求参数中
    if tools is not None:
        request_params["tools"] = tools
    
    response = client.chat.completions.create(**request_params)
    
    if stream:
        return response
    else:
        return response.choices[0].message